import fs from 'fs'
import path from 'path'

/**
 * 随机视频插件
 * 支持功能：
 * - #看看、#看：随机返回一条视频  
 * - #当前api数量：查看API数量（仅主人可用）
 */
export class RandomVideo extends plugin {
  constructor() {
    super({
      /** 插件名称 */
      name: '随机视频',
      /** 插件描述 */
      dsc: '随机视频插件，可以随机返回视频链接',
      /** 监听事件类型 */
      event: 'message',
      /** 插件优先级，数字越小优先级越高 */
      priority: 500,
      /** 命令规则配置 */
      rule: [
        {
          /** 匹配正则表达式 - 匹配 #看看 或 #看 */
          reg: '^#(看看|看)$',
          /** 执行的函数名 */
          fnc: 'getRandomVideo'
        },
        {
          /** 匹配正则表达式 - 匹配 #当前api数量 */
          reg: '^#当前api数量$',
          /** 执行的函数名 */
          fnc: 'getApiCount'
        }
      ]
    })

    /** API文件路径 - 指向当前插件目录下的hlx.txt */
    this.apiFilePath = path.join(process.cwd(), 'plugins', 'fengyun-plugin', 'hlx.txt')
  }

  /**
   * 验证视频链接格式
   * @param {string} url - 视频链接
   * @returns {boolean} - 是否为有效的视频链接
   */
  isValidVideoUrl(url) {
    // 检查是否以http开头，以14971结尾
    return url.startsWith('http') && url.endsWith('14971')
  }

  /**
   * 获取随机视频
   * @param {Object} e - 事件对象
   * @returns {Promise<boolean>} - 返回是否成功处理
   */
  async getRandomVideo(e) {
    try {
      // 检查API文件是否存在
      if (!fs.existsSync(this.apiFilePath)) {
        await e.reply('API文件不存在，请联系管理员添加视频资源')
        return true
      }

      // 读取API文件内容
      const apiContent = fs.readFileSync(this.apiFilePath, 'utf8')
      
      // 按行分割并过滤空行和无效链接
      const apiList = apiContent
        .split('\n')
        .map(line => line.trim())
        .filter(line => line && this.isValidVideoUrl(line))
      
      // 检查是否有可用的API
      if (apiList.length === 0) {
        await e.reply('暂无可用的视频资源或API格式不正确')
        return true
      }

      // 随机选择一个视频链接
      const randomIndex = Math.floor(Math.random() * apiList.length)
      const randomVideo = apiList[randomIndex]

      // 发送视频消息
      await e.reply([
        '为你推荐一个视频：',
        { type: 'video', file: randomVideo }
      ])

      logger.info(`[随机视频] 用户 ${e.user_id} 获取了随机视频`)
      
    } catch (error) {
      logger.error(`[随机视频] 获取随机视频失败:`, error)
      await e.reply('获取视频失败，请稍后再试')
    }
    
    return true
  }

  /**
   * 获取API数量（仅主人可用）
   * @param {Object} e - 事件对象  
   * @returns {Promise<boolean>} - 返回是否成功处理
   */
  async getApiCount(e) {
    try {
      // 检查是否为主人
      if (!e.isMaster) {
        await e.reply('只有主人才能查看API数量')
        return true
      }

      // 检查API文件是否存在
      if (!fs.existsSync(this.apiFilePath)) {
        await e.reply('API文件不存在')
        return true
      }

      // 读取API文件内容
      const apiContent = fs.readFileSync(this.apiFilePath, 'utf8')
      
      // 按行分割并过滤空行
      const allLines = apiContent.split('\n').filter(line => line.trim())
      // 验证有效的视频链接
      const validApis = allLines.filter(line => this.isValidVideoUrl(line.trim()))
      const invalidApis = allLines.length - validApis.length

      // 回复API数量统计
      await e.reply([
        'API统计信息：',
        `总链接数量：${allLines.length} 条`,
        `有效视频链接：${validApis.length} 条`,
        invalidApis > 0 ? `无效链接：${invalidApis} 条` : '所有链接格式正确',
        `文件路径：${this.apiFilePath}`,
        validApis.length > 0 ? '状态正常' : '暂无可用API'
      ])

      logger.info(`[随机视频] 主人 ${e.user_id} 查看了API数量: 总数${allLines.length}, 有效${validApis.length}`)
      
    } catch (error) {
      logger.error(`[随机视频] 获取API数量失败:`, error)
      await e.reply('获取API数量失败')
    }
    
    return true
  }
}